package com.exam.FaceLogin.server;


import com.exam.FaceLogin.bean.result.FaceResult;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.iai.v20180301.IaiClient;
import com.tencentcloudapi.iai.v20180301.models.CompareFaceRequest;
import com.tencentcloudapi.iai.v20180301.models.CompareFaceResponse;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author tanyongpeng
 * <p>调用腾讯接口</p>
 **/
@Component
@Data
@Slf4j
public class FaceContrastServer {

    @Value("${tencentcloudapi.secretId}")
    private String secretId;
    @Value("${tencentcloudapi.secretKey}")
    private String secretKey;
    @Value("${tencentcloudapi.endpoint}")
    private String endpoint;
    @Value("${tencentcloudapi.region}")
    private String region;

    public FaceResult faceContrast(String imageA, String imageB){
        // 结果集封装
        FaceResult faceResult = new FaceResult();
        try{
            // 创建腾讯云凭证（Credential），需要提供secretId和secretKey，用于身份验证。
            Credential cred = new Credential(secretId, secretKey);

            // 创建HTTP配置文件（HttpProfile），设置接口的访问地址（endpoint）。
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint(endpoint);

            // 创建客户端配置文件（ClientProfile），将HTTP配置文件设置为客户端配置文件的一部分
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);

            // 创建人脸识别客户端（IaiClient），需要提供凭证、区域（region）和客户端配置文件。
            IaiClient client = new IaiClient(cred, region, clientProfile);

            // 构造人脸对比请求（CompareFaceRequest），并设置请求参数：imageA和imageB
            CompareFaceRequest req = new CompareFaceRequest();
            req.setImageA(imageA);
            req.setImageB(imageB);

            // 调用人脸对比接口，将请求作为参数传递给客户端，获取响应结果（CompareFaceResponse）
            CompareFaceResponse resp = client.CompareFace(req);

            // 从响应结果中获取人脸相似度分数（score），并将其设置到返回结果对象（FaceResult）中
            faceResult.setScore(resp.getScore());
            faceResult.setCode(FaceResult.SUCCESS_CODE);

        } catch (TencentCloudSDKException e) {
            // 如果发生腾讯云SDK异常，将返回结果的状态码设置为人脸错误状态（FACE_ERROR），并将异常信息（
            // e.getMessage()）设置到返回结果的消息（msg）中。
            faceResult.setCode(FaceResult.FACE_ERROR);
            faceResult.setMsg(e.getMessage());
        }
        return faceResult;
    }
}




